package com.begye.smartloan.apptest.renzheng

import android.annotation.SuppressLint
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.allViews
import androidx.lifecycle.ViewModelProvider
import com.begye.smartloan.apptest.R
import com.begye.smartloan.apptest.databinding.AtRenZhengBinding
import com.begye.smartloan.apptest.fangkuanzhong.FangKuanZhongActivity
import com.begye.smartloan.apptest.gongong.YongHuLiuChengViewModel
import com.begye.smartloan.apptest.homeadsource.HomeAdSourceActivity
import com.begye.smartloan.apptest.homebefore.HomeBeforeActivity
import com.begye.smartloan.apptest.huankuan.HuanKuanActivity
import com.begye.smartloan.apptest.jujue.JuJueActivity
import com.begye.smartloan.apptest.kefu.KeFuDialogFragment
import com.begye.smartloan.apptest.renzheng.alldone.RenZhengAllDoneActivity
import com.begye.smartloan.apptest.renzheng.bangka.RenZhengBangKaActivity
import com.begye.smartloan.apptest.renzheng.dialog.FillItemDateDialogFragment
import com.begye.smartloan.apptest.renzheng.dialog.FillItemEmptyFillDialogFragment
import com.begye.smartloan.apptest.renzheng.dialog.FillItemSelectListDialogFragment
import com.begye.smartloan.apptest.renzheng.document.RenZhengDocumentActivity
import com.begye.smartloan.apptest.renzheng.lianxiren.RenZhengLianXiRenActivity
import com.begye.smartloan.apptest.renzheng.selfie.RenZhengSelfieActivity
import com.begye.smartloan.apptest.renzheng.views.FillItemDate
import com.begye.smartloan.apptest.renzheng.views.FillItemDoingHeader
import com.begye.smartloan.apptest.renzheng.views.FillItemGender
import com.begye.smartloan.apptest.renzheng.views.FillItemInput
import com.begye.smartloan.apptest.renzheng.views.FillItemSelect
import com.begye.smartloan.apptest.renzheng.views.FillItemStatus
import com.begye.smartloan.apptest.renzheng.views.IFillItemResult
import com.begye.smartloan.apptest.shenhezhong.ShenHeZhongActivity
import com.begye.smartloan.apptest.tool.LoginTool
import com.begye.smartloan.apptest.tool.PageTagTool
import com.begye.smartloan.apptest.tool.addTouch
import com.util.utillib.extend.IntentFlagMode
import com.util.utillib.extend.toNextActivity
import org.json.JSONArray
import org.json.JSONObject


@SuppressLint("CustomWelcomeScreen")
class RenZhengActivity : AppCompatActivity() {

    private lateinit var _binding: AtRenZhengBinding
    private lateinit var _fillSelectListDialogFragment: FillItemSelectListDialogFragment
    private lateinit var _fillDateDialogFragment: FillItemDateDialogFragment

    private val _yongHuLiuChengViewModel by lazy {
        ViewModelProvider(this)[YongHuLiuChengViewModel::class.java]
    }

    @SuppressLint("NotifyDataSetChanged")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()

        _binding = AtRenZhengBinding.inflate(layoutInflater)
        setContentView(_binding.root)

        configYongHuLiuChengState()
        configUIState()
        configUIEvent()
        configRemoteData()
    }

    private fun configYongHuLiuChengState() {

        _yongHuLiuChengViewModel.onLoadingStateLiveData.observe(this) {
            if (it == true) {
                _binding.atGlobalLoading.show()
            } else {
                _binding.atGlobalLoading.hide()
            }
        }

        _yongHuLiuChengViewModel.onHasOrderStatusLiveData.observe(this) {
            it?.let { result ->
                when (result) {
                    PageTagTool.dai_huan_kuan -> {
                        toNextActivity(
                            activity = HuanKuanActivity::class.java,
                            mode = IntentFlagMode.SINGLE_TOP
                        )
                    }

                    PageTagTool.fang_kuan_zhong -> {
                        toNextActivity(
                            activity = FangKuanZhongActivity::class.java,
                            mode = IntentFlagMode.SINGLE_TOP
                        )
                    }

                    PageTagTool.shen_he_zhone -> {
                        toNextActivity(
                            activity = ShenHeZhongActivity::class.java,
                            mode = IntentFlagMode.SINGLE_TOP
                        )
                    }

                    PageTagTool.ju_jue -> {
                        toNextActivity(
                            activity = JuJueActivity::class.java,
                            mode = IntentFlagMode.SINGLE_TOP
                        )
                    }
                }
            }
        }

        _yongHuLiuChengViewModel.onDoneFillLiveData.observe(this) {
            addDoneUI(it)
        }

        _yongHuLiuChengViewModel.onDoingFillLiveData.observe(this) {
            val obj = it.first
            val list = it.second
            addDoingUI(obj, list)
        }

        _yongHuLiuChengViewModel.onFutureFillLiveData.observe(this) {
            addFutureUI(it)
        }

        _yongHuLiuChengViewModel.onDoingLianXiRenPageLiveData.observe(this) {
            if (it) {
                toNextActivity(
                    activity = RenZhengLianXiRenActivity::class.java,
                    mode = IntentFlagMode.SINGLE_TOP
                )
            }
        }

        _yongHuLiuChengViewModel.onDoingBangKaFrPageLiveData.observe(this) {
            if (it) {
                toNextActivity(
                    activity = RenZhengBangKaActivity::class.java,
                    mode = IntentFlagMode.SINGLE_TOP
                )
            }
        }

        _yongHuLiuChengViewModel.onDoingDocumentPageLiveData.observe(this) {
            if (it) {
                toNextActivity(
                    activity = RenZhengDocumentActivity::class.java,
                    mode = IntentFlagMode.SINGLE_TOP
                )
            }
        }

        _yongHuLiuChengViewModel.onDoingSelfiePageLiveData.observe(this) {
            if (it) {
                toNextActivity(
                    activity = RenZhengSelfieActivity::class.java,
                    mode = IntentFlagMode.SINGLE_TOP
                )
            }
        }

        _yongHuLiuChengViewModel.onAllDoneLiveData.observe(this) {
            if (it.isNotBlank()) {
                // to shen qing ye
                toNextActivity(
                    activity = RenZhengAllDoneActivity::class.java,
                    mode = IntentFlagMode.SINGLE_TOP,
                    params = hashMapOf<String, String>().apply {
                        put("titles", it)
                    }
                )
            }
        }
    }

    private fun configUIState() {

    }

    private fun configUIEvent() {

        _binding.atRenZhengNav.initConfig(
            text = getString(R.string.fill_text_3),
            textColor = "#000000",
            leftResId = R.drawable.dres_39,
            rightResId = R.drawable.dres_38
        ) {
            if (0 == it) {
                if (LoginTool.filterAdType()) {
                    toNextActivity(
                        activity = HomeAdSourceActivity::class.java,
                        mode = IntentFlagMode.SINGLE_TOP
                    )
                } else {
                    toNextActivity(
                        activity = HomeBeforeActivity::class.java,
                        mode = IntentFlagMode.SINGLE_TOP
                    )
                }
            } else if (1 == it) {
                val dialog = KeFuDialogFragment()
                dialog.showNow(supportFragmentManager, "kefu")
            }
        }

        _binding.atRenZhengDoingSubmit.setOnClickListener {
            combineParams()
        }

        _fillSelectListDialogFragment = FillItemSelectListDialogFragment()
        _fillDateDialogFragment = FillItemDateDialogFragment()
    }

    private fun configRemoteData() {
        _yongHuLiuChengViewModel.requestYongHuLiuCheng()
    }

    private fun addDoneUI(value: List<JSONObject>? = null) {
        _binding.atRenZhengDoneContent.removeAllViews()

        value?.let { list ->
            for (index in list.indices) {
                val item = list[index]
                val fillItem = FillItemStatus(this)
                fillItem.initDataSource(item)
                fillItem.addCompleted(true)
                _binding.atRenZhengDoneContent.addView(fillItem)
            }
        }
    }

    private fun addDoingUI(obj: JSONObject? = null, value: List<JSONObject>? = null) {
        _binding.atRenZhengDoingContent.removeAllViews()

        obj?.let { result ->
            val fillItemDoingHeader = FillItemDoingHeader(this)
            fillItemDoingHeader.addTag(result.optString("tag", ""))
            fillItemDoingHeader.addTitle(result.optString("title", ""))
            _binding.atRenZhengDoingContent.addView(fillItemDoingHeader)
        }

        value?.let { list ->
            for (index in list.indices) {
                val item = list[index]
                val action = item.optString("action", "")
                val values = item.optJSONArray("values") ?: JSONArray()

                if (action.contains("input", true)) {
                    val fillItem = FillItemInput(this)
                    fillItem.initDataSource(item)
                    _binding.atRenZhengDoingContent.addView(fillItem)

                } else if (action.contains("select", true)) {
                    val fillItem = FillItemSelect(this)
                    fillItem.initDataSource(item)
                    fillItem.addClickListener { fTag, fTitle ->
                        _fillSelectListDialogFragment.apply {
                            addTitle(fTitle)
                            addDataSource(values)
                            addClickListener { _, jsonObject ->
                                val content = jsonObject.optString("value", "")
                                fillItem.addContent(content)
                            }
                            showNow(supportFragmentManager, fTag)
                        }
                    }
                    _binding.atRenZhengDoingContent.addView(fillItem)

                } else if (action.contains("date", true)) {
                    val fillItem = FillItemDate(this)
                    fillItem.initDataSource(item)
                    fillItem.addClickListener { fTag, fTitle ->
                        _fillDateDialogFragment.addTitle(fTitle).showWithTag(
                            fm = supportFragmentManager,
                            pickTag = fTag
                        ) { _, date ->
                            fillItem.addContent(date)
                        }
                    }
                    _binding.atRenZhengDoingContent.addView(fillItem)

                } else if (action.contains("gender", true)) {
                    val fillItem = FillItemGender(this)
                    fillItem.initDataSource(item)
                    _binding.atRenZhengDoingContent.addView(fillItem)
                }
            }
        }
    }

    private fun addFutureUI(value: List<JSONObject>? = null) {
        _binding.atRenZhengFutureContent.removeAllViews()

        value?.let { list ->
            for (index in list.indices) {
                val item = list[index]
                val fillItem = FillItemStatus(this)
                fillItem.initDataSource(item)
                fillItem.addCompleted(false)
                _binding.atRenZhengFutureContent.addView(fillItem)
            }
        }
    }

    private fun combineParams() {
        val list = _binding.atRenZhengDoingContent.allViews
        val params = hashMapOf<String, Any>()
        var allItemsFilled = true
        for (view in list) {
            if (view is IFillItemResult) {
                val tag = view.tag.toString().trim()
                val result = view.calResult()
                val isMust = view.isMust()
                if (isMust and result.isBlank()) {
                    allItemsFilled = false
                }
                params[tag] = result
            }
        }
        if (params.isNotEmpty() and allItemsFilled) {
            _yongHuLiuChengViewModel.requestUpdateYongHuLiuCheng(params)
        } else {
            val dialog = FillItemEmptyFillDialogFragment()
            dialog.showNow(supportFragmentManager, "notFills")
        }
    }

    override fun onResume() {
        super.onResume()

        addTouch(type = this.javaClass.simpleName, isOpen = true)
    }

    override fun onPause() {
        super.onPause()

        addTouch(type = this.javaClass.simpleName, isComplete = true)
    }
}

